package tutoria.lobao.poo.maratona.questao08;

public class Questao08 {

	public static void main(String[] args) {
		char[][] matriz = { { '*', '.', '.', '.' }, { '*', '.', '*', '.' } };
		int[][] contagem = contarBombas(matriz);

		System.out.println("Matriz original:");
		escreverMatriz(matriz);

		System.out.println("Matriz contada:");
		escreverMatriz(contagem);

	}

	private static void escreverMatriz(char[][] matriz) {
		for (int i = 0; i < matriz.length; i++) {
			for (int j = 0; j < matriz[i].length; j++) {
				System.out.print(matriz[i][j] + " ");
			}
			System.out.print("\n");
		}
	}

	private static void escreverMatriz(int[][] matriz) {
		for (int i = 0; i < matriz.length; i++) {
			for (int j = 0; j < matriz[i].length; j++) {
				System.out.print(matriz[i][j] + " ");
			}
			System.out.print("\n");
		}
	}

	private static int[][] contarBombas(char[][] matriz) {
		int[][] contagem = matrizContagem(matriz);

		for (int i = 0; i < contagem.length; i++) {
			for (int j = 0; j < contagem[i].length; j++) {
				if (contagem[i][j] == -1) {
					adicionarValor(contagem, i, j);
				}
			}
		}

		return contagem;
	}

	private static void adicionarValor(int[][] matriz, int x, int y) {
		for (int i = x - 1; i <= x + 1; i++) {
			for (int j = y - 1; j <= y + 1; j++) {
				if (posicaoValida(matriz, i, j) && matriz[i][j] != -1) {
					matriz[i][j]++;
				}
			}
		}
	}

	private static boolean posicaoValida(int[][] matriz, int x, int y) {
		return (x >= 0 && x < matriz.length) && (y >= 0 && y < matriz[0].length);
	}

	private static int[][] matrizContagem(char[][] matriz) {
		int[][] contagem = new int[matriz.length][matriz[0].length];

		for (int i = 0; i < matriz.length; i++) {
			for (int j = 0; j < matriz[i].length; j++) {
				if (matriz[i][j] == '*') {
					contagem[i][j] = -1;
				} else {
					contagem[i][j] = 0;
				}
			}
		}

		return contagem;
	}
}
